package com.rocketmq.example;

import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

public class E08_SendDelayTimeMessage {
    private static final String TOPIC = "DelayTimeMessage";

    public static void main(String[] args) {
        DefaultMQProducer producer = new DefaultMQProducer(TOPIC);
        producer.setNamesrvAddr(ExampleMQConfig.ENDPOINT.getName());

        try {
            producer.start();
        } catch (MQClientException e) {
            e.printStackTrace();
        }
        try {
            Message message = new Message(TOPIC, ExampleMQConfig.TAG.getName(), "延时消息".getBytes());

            // 以下设置均代表5秒之后发送
            /**
             * setDelayTimeSec ：设置消息的延迟发送时间，单位为秒。这意味着消息将在当前时间之后的指定秒数后发送。
             * 如果设置的延迟时间超过了RocketMQ支持的最大延迟级别，RocketMQ会自动使用支持的最大延迟级别。
             */
            // message.setDelayTimeSec(5);
            /**
             * setDelayTimeMs ：设置消息的延迟发送时间，单位为毫秒。这与setDelayTimeSec类似，只不过时间单位不同，
             * setDelayTimeMs是以毫秒为单位来设置延迟时间。同样，如果设置的延迟时间超过了RocketMQ支持的最大延迟级别，RocketMQ会自动使用支持的最大延迟级别。
             */
            // message.setDelayTimeMs(5000);
            /**
             * setDelayTimeLevel ：设置消息的延迟级别，这是一个更为简便的方法来设置消息的延迟时间。
             * 分别为 1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
             */
            message.setDelayTimeLevel(2);
            // 可直接使用时间戳
            // message.setDeliverTimeMs(System.currentTimeMillis() + 10_000L);

            SendResult sendResult = producer.send(message);
            System.err.println(sendResult);

        } catch (Exception e) {
            e.printStackTrace();
        }
        producer.shutdown();
    }

}
